﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
    GenesiServices svclayer = new GenesiServices();
    List<GenesiModel.Articoli> Associati = new List<GenesiModel.Articoli>();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["associati"] != null) Associati = (List<GenesiModel.Articoli>)Session["Associati"];

        if (!IsPostBack)
        {
            Session["associati"] = null;
            BindFornitori();
            BindArticoli();
            BindDispo();
            gvModelli_DataBind();
        }
    }

    void BindFornitori()
    {
        var L = svclayer.GetFornitoriList();
        L.Insert(0, new GenesiModel.Fornitori());
        ddFornitori.DataSource = L;
        ddFornitori.DataBind();
    }

    void BindArticoli()
    {
        int sel = string.IsNullOrEmpty(ddFornitori.SelectedItem.Value) ? 0 : int.Parse(ddFornitori.SelectedItem.Value);
        var L = svclayer.GetArticoliList(sel);
        L.Insert(0, new GenesiModel.Articoli());
        ddArticoli.DataSource = L;
        ddArticoli.DataBind();
    }
    void BindDispo()
    {
        var oList = svclayer.CercaArticoli(ddFornitori.SelectedItem.Value, ddArticoli.SelectedItem.Value);
        dispo.DataSource = oList.Select(a => new { a.id, a.IdFornitore, a.CodArt, a.descrizione, a.Iva, a.PrezzoUnitario, DescUnitaMisura = a.UnitaMisura1.Descrizione }).ToList();
        dispo.DataBind();
    }
    protected void btnFiltra_Click(object sender, EventArgs e)
    {
        BindDispo();
    }

    protected void Associa(object sender, GridViewCommandEventArgs e)
    {

        int _id = Convert.ToInt32(e.CommandArgument);
        var art = svclayer.Articolo(_id);

        GenesiModel.Articoli myLocatedObject = Associati.Find(delegate(GenesiModel.Articoli p) { return p.id == _id; });
        if (art != null && myLocatedObject == null)
        {
            Associati.Add(art);
            Session["associati"] = Associati;
            gvAssociati.DataSource = Associati.Select(a => new { a.id, a.IdFornitore, a.CodArt, a.descrizione, a.Iva, a.PrezzoUnitario, DescUnitaMisura = a.UnitaMisura1.Descrizione }).ToList();
            gvAssociati.DataBind();

        }
    }

    protected void DeAssocia(object sender, GridViewCommandEventArgs e)
    {

        int _id = Convert.ToInt32(e.CommandArgument);
        var art = svclayer.Articolo(_id);
        GenesiModel.Articoli myLocatedObject = Associati.Find(delegate(GenesiModel.Articoli p) { return p.id == _id; });
        if (art != null && myLocatedObject != null)
        {

            //Associati.Remove(art);
            Associati.RemoveAll(x => x.id == art.id);

            Session["associati"] = Associati;
            gvAssociati.DataSource = Associati.Select(a => new { a.id, a.IdFornitore, a.CodArt, a.descrizione, a.Iva, a.PrezzoUnitario, DescUnitaMisura = a.UnitaMisura1.Descrizione }).ToList();
            gvAssociati.DataBind();

        }
    }

    protected void SalvaModello(object sender, EventArgs e)
    {
        List<ComposizioneModelli> lista = new List<ComposizioneModelli>();
        foreach (GridViewRow row in gvAssociati.Rows)
        {
            // DataRowView rowView = (DataRowView)row.DataItem;
            int intQta = 0;
            string qta = ((TextBox)row.FindControl("txtQTA")).Text;
            if (!string.IsNullOrEmpty(qta))
            {
                int.TryParse(qta, out intQta);
                if (intQta > 0)
                {
                    lista.Add(new ComposizioneModelli
                    {
                        idarticolo = Convert.ToInt32(gvAssociati.DataKeys[row.DataItemIndex].Value)
                        ,
                        qta = intQta
                    });
                }
            }
        }
        if (lista.Count > 0)
        {
            var t = new NuovaTestataModello();
            t.Descrizione = descrizioneNew.Text;
            t.Nome = nomeNew.Text;
            t.idUtente = 1;

            svclayer.AddModello(t, lista);
        }
        gvModelli_DataBind();
    }

    void gvModelli_DataBind()
    {
        gvModelli.DataSource = svclayer.GetListaModelli(1);
        gvModelli.DataBind();
    }

    protected void gvModelli_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {

        gvModelli.PageIndex = e.NewPageIndex;

        gvModelli.DataBind();

    }
    protected void gvModelli_Sorting(object sender, GridViewSortEventArgs e)
    {

        DataTable dt = gvModelli.DataSource as DataTable;



        if (dt != null)
        {

            DataView dv = new DataView(dt);

            dv.Sort = String.Format("{0} {1}", e.SortExpression, ConvertSort(e.SortDirection));



            gvModelli.DataSource = dv;

            gvModelli.DataBind();

        }

    }

    private string ConvertSort(SortDirection sortDirection)
    {

        string m_SortDirection = String.Empty;

        switch (sortDirection)
        {

            case SortDirection.Ascending:

                m_SortDirection = "ASC";

                break;



            case SortDirection.Descending:

                m_SortDirection = "DESC";

                break;

        }

        return m_SortDirection;

    }

    protected void gvModelliCommand(object sender, GridViewCommandEventArgs e)
    {

        int _id = Convert.ToInt32(e.CommandArgument);

        switch (e.CommandName)
        {
            case "Elimina":
                svclayer.DeleteModello(_id);
                gvModelli_DataBind();
                break;
            case "Convert":
                break;
            case "Modify":
                break;
            default:
                break;
        }


    }
}